package lanqiao;
/**
 * 双向排序【第十二届】【省赛】【B组】
 * [输入格式]
 *   输入的第一行包含两个整数n, m,分别表示序列的长度和操作次数。
 *   接下来m行描述对序列的操作，其中第i行包含两个整数pi, qi;表示操作类型和参数。
 *   当pi=0时，表示将a(1),a(2),... ,a(qi)降序排列;当pi=1时，表示将a(qi),a(qi+1)+.. ,a(n)升序排列。
 * [输出格式]
 *   输出一行，包含n个整数，相邻的整数之间使用一个空格分隔，表示操作完成后的序列。
 * [样例输入]
 *   3 3
 *   0 3
 *   1 2
 *   0 2
 * [样例输出]
 *   3 1 2
 */
import java.util.Arrays;
import java.util.Scanner;
public class Prev_276 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] data = new int[n];
        for(int i=0; i<data.length; i++){
            data[i] = i+1;
        }
        int m = input.nextInt();
        for(int i=0; i<m; i++){
            int pi = input.nextInt();
            int qi = input.nextInt();
            if(pi == 0) {
                //从第1个到第qi个元素降序排列
                gradeDown(data, 0, qi);
            }else{
                //从第qi个到最后一个升序排列
                Arrays.sort(data, qi-1, data.length);
            }
        }
        //所有处理完毕
        for(int i=0; i<data.length; i++) {
            System.out.print(data[i] + " ");
        }
    }
    //降序排列
    public static void gradeDown(int[] data, int fromIndex, int toIndex) {
        for(int i=fromIndex; i<toIndex-1; i++) {
            for(int j=i+1; j<toIndex; j++) {
                if(data[i] < data[j]) {
                    data[i] = data[i] + data[j] - (data[j] = data[i]);
                }
            }
        }
    }
}
